home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.whtech.com
/
ftp.whtech.com.tar
/
ftp.whtech.com
/
datasheets and manuals
/
Hardware
/
WHT
/
scsi
/
dsr_sources_2_2001
/
restore
< prev
next >
Wrap
Text File
|
2006-10-19
|
2KB
|
96 lines
**
*
* I/O Op Code 6 - RESTORE
*
* This routine will reset the file pointers. If the record
* number is nonzero and the file was opened for relative
* access, the file pointer will be set to the specified
* record. Otherwise, it will reset to the beginning of
* the file.
*
**
REST0 ANDI R12,>FF00
AI R12,24
LDCR @B02,4
BLWP @IFO Check to make sure file is open
JEQ REST2
REST1 BL @DSRERR
DATA >0700 File error
REST2
* If file was open for output or append, error!
*
CB @56(R5),@B01
JEQ REST1
CB @56(R5),@B04
JEQ REST1
* If no record number is given, go to the beginning of the file
*
LDCR @ZERO,4
MOV @PABBUF+6,R1
JNE REST10
* We will check to see if the 1st sector of the file is in
* the buffer. If it is, we won't destroy it completely to
* save reading the sector back in later.
*
LDCR @B02,4
MOV @4(R5),R2 Get FDR address
LDCR @2(R5),4
MOV @40(R2),R10 Get 1st AU of file
JEQ REST5
LDCR @B02,4
C R10,@50(R5)
JNE REST5
C @ZERO,@52(R5)
JNE REST5
REST3 MOV @6(R5),@54(R5) Reset pointer in buffer
CLR @62(R5) Reset record number
LDCR @2(R5),4 If variable length files,
MOVB @12(R2),R3 set sector number to 1
ANDI R3,>8000
JEQ REST4
LDCR @B02,4
C @ZERO,@50(R5)
JEQ REST4
INC @62(R5)
REST4 LDCR @ZERO,4
B @DSRRT
REST5 CLR @50(R5) Reset current AU
CLR @52(R5) Reset sector within AU
JMP REST3
**
*
* Here we reset to a specific record number. Make sure
* the file was opened for relative access, then position
* to that record number.
*
* If the record isn't in the current buffer, we call FLUSH
* to make sure we write out any updated information.
*
**
REST10
LDCR @B02,4 Select RAM bank 2
MOVB @57(R5),R1 Check for relative access
JNE REST11
BL @DSRERR
DATA >0700 File error
REST11
BL @POSIT Position the file pointer
LDCR @ZERO,4
B @DSRRT